七天帶你初探AR世界-Day 5


Day 5

今天教大家第二個手勢,UILongPressGestureRecognizer ,顧名思義為首長按螢幕會觸發的動作,本來想使用 UIPanGestureRecognizer 做拖移物件的動作,但昨天已經使用過了所以改為長按觸發來做。

首先我們一樣建立好手勢觸發後該做什麼事的 func

@objc func didPan(_ recognizer: UILongPressGestureRecognizer) {

    guard let recognizerView = recognizer.view as? ARSCNView else { return }

    if recognizer.state == .changed {

        let results = self.sceneView.hitTest(recognizer.location(in: recognizer.view),
                                             types: ARHitTestResult.ResultType.featurePoint)

        guard let result: ARHitTestResult = results.first else { return }

        object?.position = SCNVector3Make(result.worldTransform.columns.3.x,
                                          result.worldTransform.columns.3.y,
                                          object?.position.z ?? -0.5)
    }
}
  • 先確認 recognizer.view 是否為 ARSCNView
  • recognizer 有很多種形態,這邊我們使用 .change 來做事。
  • 宣告 resultssceneView 中,點擊測試的特徵點。
  • 並檢查 results 是否為上一次點擊的點,否則 return 掉。
  • 最後給予 object 長按點擊後所拖曳的的位置。

並加入 addGesture() 裡:

    func addGesture()  {
        let pinch = UIPinchGestureRecognizer(target: self, action: #selector(didPinch(_:)))
        let pan = UILongPressGestureRecognizer(target: self, action: #selector(didPan(_:)))
        sceneView.addGestureRecognizer(pan)
        sceneView.addGestureRecognizer(rotate)
}

目前你的手勢 func 裡會長這樣~

#ARKit #Gesture #3Dmodel #Day5







你可能感興趣的文章

CSS split four squares

CSS split four squares

1731. The Number of Employees Which Report to Each Employee

1731. The Number of Employees Which Report to Each Employee

CSS保健室|如何嵌入響應式YouTube影片?

CSS保健室|如何嵌入響應式YouTube影片?






留言討論